package server.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import server.business.pojo.OverallBlood;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Galaxy
 * @description 针对表【overall_blood(整体输血信息表)】的数据库操作Service
 * @createDate 2022-11-08 12:46:24
 */
public interface OverallBloodService extends IService<OverallBlood> {


    // *************************************lrz*************************start
    void setStateByTransfusionNumber(String transfusionNumber, String condition);

    //*************************************lrz*************************end


    //*************************************zy*************************start

    /**
     * 根据病历号查询是否允许退血
     *
     * @param number 患者的病历号
     * @return 返回整体输血信息
     */
    List<OverallBlood> findIsAllowBackByNumber(Integer number);

    /**
     * 根据输血申请单号更改整体输血信息表中的状态和单号
     *
     * @param transfusionNumber 输血申请单号
     * @param condition         状态
     * @param number            患者退血信息表中的退血单号
     */
    void updateConditionAndNumberByTransfusionNumber(String transfusionNumber, String condition, String number);

    /**
     * 根据输血申请单号更改整体输血信息表中的状态
     *
     * @param transfusionNumber 输血申请单号
     * @param condition         状态
     */
    void updateConditionByTransfusionNumber(String transfusionNumber, String condition);

    /**
     * 根据患者病历号和患者输血申请单号修改是否允许退血
     *
     * @param number        患者病历号
     * @param transfusion   患者输血申请单号
     * @param isAllowedBack 是否允许退血（1表示允许，0表示不允许）
     */
    void updateIsAllowedBackByNumberAndTransfusion(Integer number, String transfusion, Integer isAllowedBack);

    /**
     * 根据退血单号设置退血驳回原因
     *
     * @param transfusionNumber 输血单号
     * @param rejectInformation 退血驳回原因
     */
    void setRejectInformationByTransfusionNumber(String transfusionNumber, String rejectInformation);

    /**
     * 根据血液状态获取血液信息
     *
     * @param condition 血液状态
     * @return 返回退血审核通过的血液信息
     */
    List<OverallBlood> getBloodInformationByCondition(String condition);

    /**
     * 根据退血单号设置血液状态
     *
     * @param number    退血单号
     * @param condition 血液状态
     */
    void setConditionByNumber(String number, String condition);

    /**
     * 根据病历号和输血单号查询输血信息
     *
     * @param number      病历号
     * @param transfusion 输血单号
     * @return 返回输血信息
     */
    OverallBlood findByNumberAndTransfusion(Integer number, String transfusion);

    /**
     * 根据输血单号修改是否允许退血
     *
     * @param transfusion   输血单号
     * @param isAllowedBack 是否允许退血（1表示允许，0表示不允许）
     */
    void updateIsAllowedBackByTransfusion(String transfusion, Integer isAllowedBack);

    /**
     * 分页查询功能
     *
     * @param currentPage   当前页面
     * @param pageSize      页面显示个数
     * @param overallBlood 整体输血信息
     * @return 返回分页查询结果
     */
    IPage<OverallBlood> getPage(int currentPage, int pageSize, OverallBlood overallBlood);

    /**
     * 根据编号批量下载选中数据
     *
     * @param response 请求
     * @param ids      编号列表
     * @throws IOException 异常
     */
    void batchDownload(HttpServletResponse response, ArrayList<Long> ids) throws IOException;

    //*************************************zy*************************end
}
